// messageStore.ts
type Message = { role: 'system' | 'user' | 'assistant'; content: string };

const MAX_MESSAGES = 20;
const sessionMessages: Record<string, Message[]> = {};

const SYSTEM_PROMPT = `你是一个意图解析助手，请根据用户输入生成 JSON 格式，格式必须如下：
 
2. 如果用户想查询天气，请返回：
   {"tool": "weather", "input": { "city": "xxx" }}
3. 如果用户想提问我是谁/你知道我吗，请返回：
   {"tool": "greeting", "input": { "text": "xxx" }}
3. 如果用户想切换主题，
     如果没有输入，读取工具的changeTheme的inputSchema的enum让用户选择，请返回：
        {"tool": "qa", "input": { "answer": "xxx" }}
    如果有输入，根据输入自动匹配'light', 'dark'，请返回：
        {"tool": "changeTheme", "input": { "theme": "xxx" }}
3. 如果用户想改变颜色
     如果没有输入，请用户安装描述输入，你也可以给个提示，比如默认值，请返回：
       {"tool": "qa", "input": { "answer": "xxx" }}
     如果输入颜色为汉字自动转换为可以使用的颜色名称或十六进制值，然后请返回：
       {"tool": "changeBackground", "input": { "color": "xxx" }}
3. 如果用户想加载某个组件或者显示某个组件  
     如果输入名称和工具的loadComponents的inputSchema的enum进行匹配，
        说明 404: 404页面  signIn: 登录页面 loading：加载中页面
       匹配成功，请返回： 
       {"tool": "loadComponents", "input": { "componentName": "xxx" }}
4. 如果用户的问题不适用于任何工具，请结合上下文历史直接给出你自己生成的自然语言回答，封装为：
   {"tool": "qa", "input": { "answer": "你自己生成的回答" }}

重要提示：
- 你必须基于自己的知识或常识生成回答，不能推荐用户“去搜索”或“去使用天气应用”。
- 不要怕出错，你的回答不需要完全准确，但要尽可能合理 
`;

export const initSession = (sessionId: string) => {
  if (!sessionMessages[sessionId]) {
    sessionMessages[sessionId] = [{ role: 'system', content: SYSTEM_PROMPT }];
  }
};

export const addUserMessage = (sessionId: string, text: string) => {
  initSession(sessionId);
  sessionMessages[sessionId].push({ role: 'user', content: text });
  trimMessages(sessionId);
};

export const addAssistantMessage = (sessionId: string, text: string) => {
  initSession(sessionId);
  sessionMessages[sessionId].push({ role: 'assistant', content: text });
  trimMessages(sessionId);
};

export const getSessionMessages = (sessionId: string): Message[] => {
  initSession(sessionId);
  return sessionMessages[sessionId];
};

export const trimMessages = (sessionId: string) => {
  const msgs = sessionMessages[sessionId];
  if (msgs.length > MAX_MESSAGES) {
    // 保留第一个 system，截取后面 MAX_MESSAGES - 1 条
    sessionMessages[sessionId] = [msgs[0], ...msgs.slice(-MAX_MESSAGES + 1)];
  }
};
